const redis = require('redis');
const client = redis.createClient(6666, '97.64.36.18', {
    password: '342531' ,
    db: 1
});
const fs = require('fs');
const iconv = require('iconv-lite');
const path = require('path');
const filePath = path.join(__dirname, 'ip.txt');


const citydata = {
    "安徽": [
        "合肥",
        "芜湖",
        "蚌埠",
        "淮南",
        "马鞍山",
        "淮北",
        "铜陵",
        "安庆",
        "黄山",
        "阜阳",
        "宿州",
        "滁州",
        "六安",
        "宣城",
        "池州",
        "亳州"
    ],
    "北京": [
        "北京"
    ],
    "重庆": [
        "重庆"
    ],
    "香港": [
        "香港"
    ],
    "台湾": [
        "台湾"
    ],
    "福建": [
        "福州",
        "厦门",
        "莆田",
        "三明",
        "泉州",
        "漳州",
        "南平",
        "龙岩",
        "宁德",
        "平潭"
    ],
    "甘肃": [
        "兰州",
        "嘉峪关",
        "金昌",
        "白银",
        "天水",
        "酒泉",
        "张掖",
        "武威",
        "定西",
        "陇南",
        "平凉",
        "庆阳",
        "临夏回族自治州",
        "甘南藏族自治州"
    ],
    "广东": [
        "广州",
        "深圳",
        "珠海",
        "汕头",
        "佛山",
        "韶关",
        "湛江",
        "肇庆",
        "江门",
        "茂名",
        "惠州",
        "梅州",
        "汕尾",
        "河源",
        "阳江",
        "清远",
        "东莞",
        "中山",
        "潮州",
        "揭阳",
        "云浮"
    ],
    "广西": [
        "南宁",
        "柳州",
        "桂林",
        "梧州",
        "北海",
        "防城港",
        "钦州",
        "贵港",
        "玉林",
        "百色",
        "贺州",
        "河池",
        "来宾",
        "崇左",
        "南宁",
        "柳州"
    ],
    "贵州": [
        "贵阳",
        "六盘水",
        "遵义",
        "安顺",
        "毕节",
        "铜仁",
        "黔西南",
        "黔东南",
        "黔南"
    ],
    "海南": [
        "海口",
        "三亚",
        "三沙",
        "儋州"
    ],
    "河北": [
        "石家庄",
        "唐山",
        "秦皇岛",
        "邯郸",
        "邢台",
        "保定",
        "张家口",
        "承德",
        "沧州",
        "廊坊",
        "衡水",
        "定州",
        "辛集"
    ],
    "黑龙江": [
        "哈尔滨",
        "齐齐哈尔",
        "鸡西",
        "鹤岗",
        "双鸭山",
        "大庆",
        "伊春",
        "佳木斯",
        "七台河",
        "牡丹江",
        "黑河",
        "绥化",
        "大兴安岭",
        "绥芬河",
        "抚远"
    ],
    "河南": [
        "郑州",
        "开封",
        "洛阳",
        "平顶山",
        "安阳",
        "鹤壁",
        "新乡",
        "焦作",
        "濮阳",
        "许昌",
        "漯河",
        "三门峡",
        "南阳",
        "商丘",
        "周口",
        "信阳",
        "驻马店",
        "济源"
    ],
    "湖北": [
        "武汉",
        "黄石",
        "十堰",
        "宜昌",
        "襄阳",
        "鄂州",
        "荆门",
        "孝感",
        "荆州",
        "黄冈",
        "咸宁",
        "随州",
        "恩施土家族苗族自治州",
        "仙桃",
        "潜江",
        "天门",
        "神农架"
    ],
    "湖南": [
        "长沙",
        "株洲",
        "湘潭",
        "衡阳",
        "邵阳",
        "岳阳",
        "常德",
        "张家界",
        "益阳",
        "郴州",
        "永州",
        "怀化",
        "娄底",
        "湘西土家族苗族自治州"
    ],
    "内蒙古": [
        "呼和浩特",
        "包头",
        "乌海",
        "赤峰",
        "通辽",
        "鄂尔多斯",
        "呼伦贝尔",
        "巴彦淖尔",
        "乌兰察布盟",
        "兴安盟",
        "锡林郭勒盟",
        "阿拉善盟"
    ],
    "江苏": [
        "南京",
        "无锡",
        "徐州",
        "常州",
        "苏州",
        "南通",
        "连云港",
        "淮安",
        "盐城",
        "扬州",
        "镇江",
        "泰州",
        "宿迁"
    ],
    "江西": [
        "南昌",
        "九江",
        "上饶",
        "抚州",
        "宜春",
        "吉安",
        "赣州",
        "景德镇",
        "萍乡",
        "新余",
        "鹰潭"
    ],
    "吉林": [
        "长春",
        "吉林",
        "四平",
        "辽源",
        "通化",
        "白山",
        "白城",
        "松原",
        "延边朝鲜族自治州",
        "吉林省长白山保护开发区",
        "梅河口",
        "公主岭"
    ],
    "辽宁": [
        "沈阳",
        "大连",
        "鞍山",
        "抚顺",
        "本溪",
        "丹东",
        "锦州",
        "营口",
        "阜新",
        "辽阳",
        "盘锦",
        "铁岭",
        "朝阳",
        "葫芦岛"
    ],
    "宁夏": [
        "银川",
        "石嘴山",
        "吴忠",
        "固原",
        "中卫"
    ],
    "青海": [
        "西宁",
        "海东",
        "海北",
        "黄南",
        "海南",
        "果洛",
        "玉树",
        "海西"
    ],
    "山西": [
        "太原",
        "大同",
        "阳泉",
        "长治",
        "晋城",
        "朔州",
        "晋中",
        "运城",
        "忻州",
        "临汾",
        "吕梁"
    ],
    "山东": [
        "济南",
        "青岛",
        "淄博",
        "枣庄",
        "东营",
        "烟台",
        "潍坊",
        "济宁",
        "泰安",
        "威海",
        "日照",
        "莱芜",
        "临沂",
        "德州",
        "聊城",
        "滨州",
        "菏泽"
    ],
    "上海": [
        "上海"
    ],
    "四川": [
        "成都",
        "绵阳",
        "自贡",
        "攀枝花",
        "泸州",
        "德阳",
        "广元",
        "遂宁",
        "内江",
        "乐山",
        "资阳",
        "宜宾",
        "南充",
        "达州",
        "雅安",
        "阿坝",
        "甘孜",
        "凉山",
        "眉山",
        "广安",
        "巴中"
    ],
    "天津": [
        "天津"
    ],
    "西藏": [
        "拉萨",
        "昌都",
        "山南",
        "日喀则",
        "那曲",
        "阿里",
        "林芝"
    ],
    "新疆": [
        "乌鲁木齐",
        "克拉玛依",
        "吐鲁番",
        "哈密",
        "阿克苏",
        "喀什",
        "和田",
        "昌吉",
        "博尔塔拉",
        "巴音郭楞",
        "克孜勒苏",
        "伊犁"
    ],
    "云南": [
        "昆明",
        "曲靖",
        "玉溪",
        "昭通",
        "保山",
        "丽江",
        "普洱",
        "临沧",
        "德宏",
        "怒江",
        "迪庆",
        "大理",
        "楚雄",
        "红河",
        "文山",
        "西双版纳"
    ],
    "浙江": [
        "杭州",
        "宁波",
        "温州",
        "嘉兴",
        "湖州",
        "绍兴",
        "金华",
        "衢州",
        "舟山",
        "台州",
        "丽水"
    ],
    "陕西": [
        "西安",
        "宝鸡",
        "铜川",
        "咸阳",
        "渭南",
        "延安",
        "汉中",
        "榆林",
        "安康",
        "商洛",
        "杨凌示范区"
    ]
}


function _ip2long(ip) {
  if(!ip){
    return ip
  }
    var num = 0;
  ip = ip.split(".");
  num = Number(ip[0]) * 256 * 256 * 256 + Number(ip[1]) * 256 * 256 + Number(ip[2]) * 256 + Number(ip[3]);
  num = num >>> 0;
  return num;
}


client.on('error', function (err) {
    console.log('Error :' , err);
});

client.on('connect', function(){
    console.log('Redis连接成功.');
})


fs.readFile(filePath, function(err, data) {
    if (err) {
        throw err;
    }
    const str = iconv.decode(data, 'gb2312');
    const strArr = str.split('\n');
    let arr = ["ip"];


    const reg=/^\s*(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s+(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s+(.+)\s*(.*)$/

    for (let i = 0; i < strArr.length; i++) {
        const item = strArr[i];
        let start,end,address="",net,province="",city="",country="";
        item.replace(reg,($,$1,$2,$3,$4)=>{
          start=_ip2long($1);
          end=_ip2long($2);
          address=$3;
          net=$4;
        })
        if(!end){
          continue
        }

        for(let i in citydata){ //有省
          if(address.search(i)>=0){
            country="中国";
            province=i
            for(let j in citydata[i]){
              if(address.search(i)>=0){
                city=citydata[i][j]
                break;
              }
            }
            // if(!city){
            //   city=citydata[i][0]
            // }
            break;
          }
        }



        if(!country){
          for(let i in citydata){  //有市
              for(let j in citydata[i]){
                if(address.search(i)>=0){
                  country="中国";
                  province=i
                  city=citydata[i][j]
                  break;
                }
              }
            }
          }


          if(!country){  //国外
            country=address.split(" ")[0]
          }


        //console.log(country,province,city)
        arr.push(end)
        arr.push(start + ',' + end + ',' +country+',' +province+',' +city)
    }

    client.zadd(arr,(err, response)=>{
      if (err){
        console.log('失败')
        console.log(err)
      }else{
        console.log('成功')
      }

    })
})
